// 给你二叉树的根节点 root ，返回其节点值的 层序遍历 。 （即逐层地，从左到右访问所有节点）。

// 示例1：
// 输入：root = [3,9,20,null,null,15,7]
// 输出：[[3],[9,20],[15,7]]

// function TreeNode(val, left, right) {
//   this.val = (val===undefined ? 0 : val);
//   this.left = (left===undefined ? null : left);
//   this.right = (right===undefined ? null : right);
// }

function levelOrder(root) {
  if (!root) {
    return [];
  }

  // 初始化结果数组和队列
  const res = [];
  const queue = [root];

  while (queue.length) {
    // 记录当前层的节点值
    const level = [];
    const size = queue.length;

    // 遍历当前层的节点
    for (let i = 0; i < size; i++) {
      // 出队当前节点
      const node = queue.shift();
      // 记录当前节点的值
      level.push(node.val);
      // 入队当前节点的左右子节点
      if (node.left) {
        queue.push(node.left);
      }
      if (node.right) {
        queue.push(node.right);
      }
    }
    res.push(level);
  }

  return res;
}